package com.qqt.csr.workbench.vo.req;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.qqt.csr.common.idempotent.RequestKeyParam;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.*;
import lombok.*;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;

/**
 * 技能组配置
 */
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "SettingSkillSetConfigReqVO", description = "设置技能组配置")
public class SettingSkillSetConfigReqVO implements Serializable {
    @Serial
    private static final long serialVersionUID = -5379576117623414701L;

    /**
     * 技能组id
     */
    @Schema(description = "技能组id", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "技能组id不能为空")
    @RequestKeyParam
    private Long skillSetId;

    /**
     * 问候语
     */
    @Schema(description = "问候语", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "问候语不能为空")
    @Size(min = 1, max = 200, message = "问候语长度在1-200之间")
    private String greetingsTip;

    /**
     * 客服路由策略：0随机；
     */
    @Schema(description = "客服路由策略：0随机；", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "客服路由策略不能为空")
    @Min(value = 0, message = "路由策略值不合法")
    @Max(value = 0, message = "路由策略值不合法")
    private Integer routePolicy;

    /**
     * 无坐席提示
     */
    @Schema(description = "无坐席提示", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "无坐席提示不能为空")
    @Size(min = 1, max = 200, message = "无坐席提示长度在1-200之间")
    private String noSeatTip;

    /**
     * 无坐席在线策略：0 仅退出
     */
    @Schema(description = "无坐席在线策略：0 仅退出", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "无坐席在线策略不能为空")
    @Min(value = 0, message = "无坐席策略值不合法")
    @Min(value = 0, message = "无坐席策略值不合法")
    private Integer noSeatPolicy;

    /**
     * 访客超时断开设置：0 未开启；1 开启
     */
    @Schema(description = "访客超时断开设置：0 未开启；1 开启", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "访客超时断开设置不能为空")
    @Min(value = 0, message = "访客超时断开设置值不合法")
    @Max(value = 1, message = "访客超时断开设置值不合法")
    private Integer visitorDisconnTimeoutEnable;

    /**
     * 访客超时回复触发时间
     */
    @Schema(description = "访客超时回复触发时间，单位秒", requiredMode = Schema.RequiredMode.REQUIRED)
    @Min(value = 60, message = "访客超时回复触发时间最少一分钟")
    @Max(value = 3540, message = "访客超时回复触发时间最多59分钟")
    private Integer replyVisitorTimeout;

    /**
     * 访客超时回复触发提醒内容
     */
    @Schema(description = "访客超时回复触发提醒内容", requiredMode = Schema.RequiredMode.REQUIRED)
    @Size(min = 1, max = 200, message = "访客超时回复触发提醒内容长度在1-200之间")
    private String replyVisitorTimeoutTip;

    /**
     * 访客超时断开时间
     */
    @Schema(description = "访客超时断开时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer visitorDisconnTimeout;

    /**
     * 客服超时断开设置：0 未开启；1 开启
     */
    @Schema(description = "客服超时断开设置：0 未开启；1 开启", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "客服超时断开设置不能为空")
    @Min(value = 0, message = "客服超时断开设置值不合法")
    @Max(value = 1, message = "客服超时断开设置值不合法")
    private Integer csDisconnTimeoutEnable;

    /**
     * 客服超时回复触发时间
     */
    @Schema(description = "客服超时回复触发时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @Min(value = 60, message = "客服超时回复触发时间最少一分钟")
    @Max(value = 3540, message = "客服超时回复触发时间最多59分钟")
    private Integer replyCsTimeout;

    /**
     * 客服超时回复触发提醒内容
     */
    @Schema(description = "客服超时回复触发提醒内容", requiredMode = Schema.RequiredMode.REQUIRED)
    @Size(min = 1, max = 200, message = "客服超时回复触发提醒内容长度在1-200之间")
    private String replyCsTimeoutTip;

    /**
     * 客服超时断开时间
     */
    @Schema(description = "客服超时断开时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer csDisconnTimeout;

    /**
     * 会话结束提示语
     */
    @Schema(description = "会话结束提示语", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "会话结束提示语不能为空")
    @Size(min = 1, max = 200, message = "会话结束提示语长度在1-200之间")
    private String endSessionTip;

    /**
     * 组内客服统一昵称
     */
    @Schema(description = "组内客服统一昵称", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "组内客服统一昵称不能为空")
    @Size(min = 1, max = 30, message = "组内客服昵称长度在1-30之间")
    private String csNickname;

    /**
     * 组内客服统一头像地址
     */
    @Schema(description = "组内客服统一头像地址", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "组内客服统一头像地址不能为空")
    private String csHeadImg;

}